草庐IT

javascript oop、instanceof 和基类

全部标签

java - 如何使用多态而不是 instanceof? (为什么?)

如果我们采用下面的代码:Shapep1=newSquare();Squarec1;if(p1instanceofSquare){c1=(Square)p1;}相比instanceof更喜欢多态是什么意思,顺便说一句,为什么它更好?编辑:我明白什么是多态;我缺少的是如何使用它而不是instanceof。 最佳答案 if...else...(或switch,或Visitor)与多态性之间的主要区别在于模块化。有所谓的开闭原则,基本上意味着,当你向现有程序添加新功能时,对现有代码所做的更改越少越好(因为每次更改都需要一些工作,并且可能会引

java - Java 中的基类实例和派生类实例之间的物理内存是如何组织的?

当一个子类C被实例化时,我们知道它的父类(superclass)(比如A和B的构造函数(BextendsA))会比C早实例化。那么这是否意味着:是否为A实例、B实例和C实例分配了单独的内存?对于子类C的实例,它是否为继承自B和A的字段分配了所有物理内存,除了自己的字段?B的实例除了拥有自己的物理内存外,还拥有从A继承的字段的物理内存吗? 最佳答案 ...it'sknownthattheconstructorsofitssuperclasses(sayA,andB(BextendsA))willbeinstantiated...类被实

java - 如何在JSTL中实现 "instanceOf"

或者说获取类名或获取类型名这样可以在主要流行的网络容器/服务器上工作吗?谢谢。 最佳答案 ${foo.class.name}返回foo的完全限定名称。但是instanceof已经是你应该很少在设计良好的OO程序中使用的东西,它应该在JSPEL中使用得更少,在JSPEL中动态调用方法而不关心实际类型,最终目标应该只是生成标记。 关于java-如何在JSTL中实现"instanceOf",我们在StackOverflow上找到一个类似的问题: https://st

java - 使用 class.isEnum() 还是 instanceof Enum 更好?

我有一个对象。我想检查它是否是枚举类型。有两种方法可以做到这一点。object.getClass().isEnum()或objectinstanceofEnum一个更好吗? 最佳答案 在我看来objectinstanceofEnum更好,原因如下:很明显这里问的是什么:“这是一个枚举吗”?它不会冒NullPointerException的风险(如果object是null,它只会评估为false)它更短。我认为使用isEnum()的唯一原因是我只能访问Class对象而不能访问具体实例。 关

java - 如果 Object instanceof HashMap 如何检查键和值的类型?

我有一个接受对象的方法。在一个用例中,该方法接受HashMap并将每个值设置为相应键名的属性。publicvoidaddHelper(Objectobject){if(objectinstanceofHashMap){HashMaphashMap=(HashMap)object;this.foo=hashMap.get("foo");this.bar=hashMap.get("bar");}}此类遵循特定接口(interface),因此不能为这些属性添加setter。我的问题是,如何检查此处的类型转换?HashMaphashMap=(HashMap)object;提前致谢!解决方案感谢

c# - 为什么我们需要将 Object 类作为所有类的基类?

在C#或Java或任何其他遵循oops概念的语言中,默认情况下通常将“对象”作为其父类(superclass)。为什么我们需要将Object作为我们创建的所有类的基类?当C#或Java等语言中的多重继承是不可能的时,我们如何从另一个已经从Object类派生的类派生我们的类。这个问题可能看起来很愚蠢,但想知道一些专家对此的看法。 最佳答案 拥有单根类型层次结构可以以多种方式使用。特别是,在泛型出现之前,它是ArrayList之类的唯一方法。对于泛型,它的优势要小得多——尽管我怀疑它在某些情况下仍然有用。编辑:例如,LINQtoXML的

java - 为什么 Eclipse 生成的 equals() 实现在类型检查(instanceof)之前检查是否为 null?

我经常使用Eclipse的代码生成工具(Source/GeneratehashCode()和equals()...)为简单的POJO类创建equals()实现。如果我选择“Useinstanceoftocomparetypes”,这会产生一个类似这样的equals()实现:@Overridepublicbooleanequals(Objectobj){if(this==obj){returntrue;}if(obj==null){returnfalse;}if(!(objinstanceofMyClass)){returnfalse;}MyClassother=(MyClass)obj

java - 什么时候应该和不应该使用 instanceof?

看了各种文章,还是不明白为什么不能用instanceof。请让我知道您的想法。 最佳答案 我发现需要在糟糕的设计中使用instanceof提示。这是一个明确的迹象,表明一个大的、复杂的开关式结构将随之而来。大多数其他时候我看到它被使用,我们应该使用多态而不是instanceof。请参阅策略模式。(relevantexamplesofuse)我发现我唯一需要使用它的时候是在实现equals(Objecto)时。 关于java-什么时候应该和不应该使用instanceof?,我们在Stack

java优化挑剔: is it faster to cast something and let it throw exception than calling instanceof to check before cast?

在任何人说什么之前,我只是出于好奇才问这个问题;我不打算根据这个答案进行任何过早的优化。我的问题是关于使用反射和转换的速度。标准说法是“反射很慢”。我的问题是到底是哪一部分慢,为什么?特别是在比较某事物是否是另一个实例的父实例时。我非常有信心将一个对象的类与另一个类对象进行比较与任何比较一样快,大概只是对已经存储在对象状态中的单例对象进行直接比较;但是如果一个类是另一个类的父类呢?我通常认为instanceof与常规类检查一样快,但今天我想到了它,似乎必须在instanceof的“幕后”发生一些反射(reflection)开始工作。上网查了一下,发现有几个地方有人说instanceof

java - 在线程之间传递对象时是否可以使用 instanceof?

我遇到了instanceof工作的问题,然后它不工作。进入细节是困难的,但我认为这可能是问题所在:正在阅读:http://www.theserverside.com/news/thread.tss?thread_id=40229(搜索Thread.currentThread),这似乎暗示,即使这两个对象是同一个类,如果你在具有不同类加载器的线程之间传递它们,instanceof(和isAssignableFrom)可能仍然会失败。这当然可以解释我的行为,但我想知道是否有人可以验证它?(我希望在讨论开始时链接的文章仍然可用,但它似乎不是。) 最佳答案